#ifndef TEXTURE_HPP
# define TEXTURE_HPP

# include <string>
# include <glew.h>
# include <GL/GL.h>
# include "TextureBehaviour.hpp"

class Texture
{
public:
    Texture();
    virtual ~Texture();

    virtual void        bind() = 0;
    virtual void        unbind() = 0;

    virtual void        enable() = 0;
    virtual void        disable() = 0;

    virtual void        load() = 0;
    virtual void        load(std::string const& path) = 0;
    virtual void        destroy() = 0;

    std::string const&  getPath() const;
    void                setPath(std::string const& path);

    std::string const&  getName() const;
    void                setName(std::string const& name);

    void                setFilter(const GLuint min, const GLuint mag);

    TextureBehaviour    getBehaviour() const;
    void                setBehaviour(const TextureBehaviour behaviour);

protected:
    std::string         _path;
    std::string         _name;
    bool                _loaded;
    TextureBehaviour    _behaviour;

    GLuint               _id;
    GLuint               _minFilter;
    GLuint               _magFilter;
};

#endif // TEXTURE_HPP
